﻿using System.Collections.Generic;
using System.Linq;
using Business_Layer.Data_Access_Layer;

namespace Business_Layer.Business_Layer.Usuarios
{
    public class ControladorUsuarios
    {
        private readonly DB_SAPDataContext _dbSap = new DB_SAPDataContext();

        private IEnumerable<USUARIOS> ObtenerUsuarios()
        {
            return _dbSap.USUARIOS.Select(x => x).ToList();
        }

        public string CrearContenidoUsuarios()
        {
            var renderUsuarios = ObtenerUsuarios().Aggregate(string.Empty, (current, usuario) =>
                                                                    current +
                                                                    ("<tr><td>" + usuario.USUARIO_nombre +
                                                                     "</td><td>" +
                                                                     usuario.USUARIO_email +
                                                                     "</td>" +
                                                                     "<td>" +
                                                                    usuario.USUARIO_nombreUsuario +
                                                                     "</td>" +
                                                                     "<td>" +
                                                                     "<span id='editarUsuario' data-id='" +
                                                                     usuario.USUARIO_ID + "' data-nombre='" +
                                                                     usuario.USUARIO_nombre +
                                                                     "' data-nombreUsuario='" + usuario.USUARIO_nombreUsuario +
                                                                     "' data-password='" + usuario.USUARIO_password +
                                                                     "' data-email='" + usuario.USUARIO_email +
                                                                     "'><img src='/Misc/imagenes/edit_icon_24.png' /></span>" +
                                                                     "<span id='eliminarUsuario' data-id='" +
                                                                     usuario.USUARIO_ID +
                                                                     "'><img src='/Misc/imagenes/cancel.png' /></span></td></tr>"));

            return
                "<table id='tblUsuarios''>" +
                "<tr>" +
                "<th>Nombre</th><th>Email</th><th>Nombre de usuario</th><th></th>" +
                "</tr>" +
                renderUsuarios +
                "</table>";
        }

        public bool ValidarNombreUsuario(string usuario)
        {
            return _dbSap.USUARIOS.Any(x => x.USUARIO_nombreUsuario.Equals(usuario));
        }

        public bool ValidarNombreUsuario(string usuario, int id)
        {
            return _dbSap.USUARIOS.Any(x => x.USUARIO_nombreUsuario.Equals(usuario) && x.USUARIO_ID != id);
        }

        public string RegistrarUsuario(USUARIOS usuario)
        {
            try
            {
                if (ValidarNombreUsuario(usuario.USUARIO_nombreUsuario))
                    return "Este nombre de usuario ya existe, favor de especificar uno diferente";

                _dbSap.USUARIOS.InsertOnSubmit(usuario);
                _dbSap.SubmitChanges();

                return "Usuario registrado";
            }
            catch
            {
                return "Usuario no registrado";
            }
        }

        public string ModificarUsuario(USUARIOS usuario)
        {
            try
            {
                if (ValidarNombreUsuario(usuario.USUARIO_nombreUsuario, usuario.USUARIO_ID))
                    return "Este nombre de usuario ya existe, favor de especificar uno diferente";

                var usuarioModificar = _dbSap.USUARIOS.FirstOrDefault(x => x.USUARIO_ID == usuario.USUARIO_ID);

                if (usuarioModificar != null)
                {
                    usuarioModificar.USUARIO_nombre = usuario.USUARIO_nombre;
                    usuarioModificar.USUARIO_email = usuario.USUARIO_email;
                    usuarioModificar.USUARIO_nombreUsuario = usuario.USUARIO_nombreUsuario;

                    _dbSap.SubmitChanges();
                    return "Usuario editado";
                }

                return "Usuario no editado";
            }
            catch
            {
                return "Usuario no editado";
            }
        }

        public string EliminarUsuario(int id)
        {
            try
            {
                var usuario = _dbSap.USUARIOS.Single(x => x.USUARIO_ID == id);

                _dbSap.USUARIOS.DeleteOnSubmit(usuario);
                _dbSap.SubmitChanges();

                return "Usuario eliminado";
            }
            catch
            {
                return "Usuario no eliminado";
            }
        }
    }
}